#pragma once
#ifndef VERTEXFORMATS_H
#define VERTEXFORMATS_H

#include "Color.h"
#include "Vec.h"

class VertexPos2Col
{
public:
	float X;
	float Y;
	unsigned char R;
	unsigned char G;
	unsigned char B;
	unsigned char A;
	VertexPos2Col(float NewX, float NewY, unsigned char NewR, unsigned char NewG, unsigned char NewB, unsigned char NewA) :
		X(NewX), Y(NewY), R(NewR), G(NewG), B(NewB), A(NewA)
	{
	}

	VertexPos2Col(Vec<2, float> Pos, ColorRGBA<unsigned char> Color) :
		X(Pos.X), Y(Pos.Y), R(Color.R), G(Color.G), B(Color.B), A(Color.A)
	{
	}

	VertexPos2Col() :
		X(0), Y(0), R(0), G(0), B(0), A(0)
	{
	}
};


class VertexPos3Col
{
public:
	float X;
	float Y;
	float Z;
	unsigned char R;
	unsigned char G;
	unsigned char B;
	unsigned char A;
	VertexPos3Col(float NewX, float NewY, float NewZ, unsigned char NewR, unsigned char NewG, unsigned char NewB, unsigned char NewA) :
		X(NewX), Y(NewY), Z(NewZ), R(NewR), G(NewG), B(NewB), A(NewA)
	{
	}

	VertexPos3Col(Vec<3, float> Pos, ColorRGBA<unsigned char> Color) :
		X(Pos.X), Y(Pos.Y), Z(Pos.Z), R(Color.R), G(Color.G), B(Color.B), A(Color.A)
	{
	}

	VertexPos3Col(Vec<2, float> Pos, float NewZ, ColorRGBA<unsigned char> Color) :
		X(Pos.X), Y(Pos.Y), Z(NewZ), R(Color.R), G(Color.G), B(Color.B), A(Color.A)
	{
	}

	VertexPos3Col() :
		X(0), Y(0), Z(0), R(int(0)), G(int(0)), B(int(0)), A(int(0))
	{
	}
};

class VertexPos3ColTex
{
public:
	float X;
	float Y;
	float Z;
	unsigned char R;
	unsigned char G;
	unsigned char B;
	unsigned char A;
	float TexX;
	float TexY;
	VertexPos3ColTex(float NewX, float NewY, float NewZ, unsigned char NewR, unsigned char NewG, unsigned char NewB, unsigned char NewA, float NewTexX, float NewTexY) :
		X(NewX), Y(NewY), Z(NewZ), R(NewR), G(NewG), B(NewB), A(NewA), TexX(NewTexX), TexY(NewTexY)
	{
	}
	VertexPos3ColTex() :
		X(0), Y(0), Z(0), R(0), G(0), B(0), A(0), TexX(0), TexY(0)
	{
	}
};

#endif